#include <iostream>
#include <string>
#include <vector>
using namespace std;

/********* Begin *********/
class Matrix
{
	//矩阵类的声明
private:
    int row;
    int column;
    vector<vector<int>> matrix;
public:
    Matrix(int r, int c);
    void Fill(int value);
    void Set(int r, int c, int value);
    int Get(int r, int c);
    void Print();
    int getRow();
    int getColumn();
};
//矩阵类的定义

Matrix::Matrix(int r, int c) : row(r), column(c) {
    matrix = vector<vector<int>>(row);
    for (int i = 0; i < row; i++) {
        matrix[i] = vector<int>(column);
    }
}

void Matrix::Fill(int value) {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++) {
            Set(i, j, value);
        }
    }
}

void Matrix::Set(int r, int c, int value) {
    matrix[r][c] = value;
}

int Matrix::Get(int r, int c) {
    return matrix[r][c];
}

void Matrix::Print() {
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < column; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
}

int Matrix::getRow() {
    return this->row;
}

int Matrix::getColumn() {
    return this->column;
}


Matrix operator+(Matrix& m1,Matrix &m2)
{
    //实现矩阵加法
    Matrix temp(m1.getRow(), m1.getColumn());
    for (int i = 0; i < temp.getRow(); i++) {
        for (int j = 0; j < temp.getColumn(); j++) {
            temp.Set(i, j, m1.Get(i, j) + m2.Get(i, j));
        }
    }
    return temp;
}

Matrix operator-(Matrix& m1,Matrix &m2)
{
    //实现矩阵减法
    Matrix temp(m1.getRow(), m1.getColumn());
    for (int i = 0; i < temp.getRow(); i++) {
        for (int j = 0; j < temp.getColumn(); j++) {
            temp.Set(i, j, m1.Get(i, j) - m2.Get(i, j));
        }
    }
    return temp;
}

Matrix operator*(Matrix& m1,Matrix &m2)
{
    //实现矩阵乘法
    Matrix temp(m1.getRow(), m2.getColumn());
    for (int i = 0; i < temp.getRow(); i++) {
        for (int j = 0; j < temp.getColumn(); j++) {
            int sum = 0;
            for (int k = 0; k < m1.getColumn(); k++) {
                sum += m1.Get(i, k) * m2.Get(k, j);
            }
            temp.Set(i, j, sum);
        }
    }
    return temp;
}
/********* End *********/